package tdd.demo.demo002;

/**	井字棋 对象
 * 	1. 棋盘越界判断
 * 	2.给棋盘落子填充棋盘时判断是否重复落子
 * 	3.轮流落子实现
 * 	4.获胜规则判断
 * 	5.平局判断
 */
public class QiPan {
	
	/*
	 * char c= '\0'   
	 * 	代表十进制数字0指代的Unicode编码字符赋值给c变量，查阅ASCII编码表得知是NULL,表示是个长度为1的空字符串
	 * 	这里使用空字符串表示棋盘上还没有落子的状态。
	 */
	//棋盘宫格
	private  Character[][] board = {
			{'\0','\0','\0'},
			{'\0','\0','\0'},
			{'\0','\0','\0'}
	};
	//上次落子X|O， X代表黑棋、O代表白棋 
	private char lastPlayer = 'X';
	
	public static void main(String[] args) {
		Character c = '\0';
		System.out.println(c.toString().length());
	}
	
	/*
	 * 	玩的方法
	 */
	public void play(int x, int y) {
		checkAxis(x);
		checkAxis(y);
		//重复落子判断，棋盘实例化后，默认X棋先走。
		setBox(x, y, lastPlayer);
		
		
	}
	
	/*
	 * 	轮流落子
	 */
//	public char nextPlayer() {
//		return lastPlayer=='X'?'O':'X';
//	}
	
	/*
	 * 	落子
	 */
	public void setBox(int x, int y, char lastPlayer) {
		if(board[x-1][y-1] != '\0') {
			throw new RuntimeException("该棋盘宫格上已经落子了，请重新选择其它空白宫格落子");
		}
		board[x-1][y-1]=(lastPlayer=='X'?'O':'X');//这里已经给出lastPlayer的判定，表示在本次落子之后下一位落子者是对方。
	}
	
	/*
	 * 	边界检查
	 */
	public void checkAxis(int x) {
		if(x<1 || x>3) {
			throw new RuntimeException("X or O 越界了");
		}
	}

}
